package com.demo.core.dao;

import java.util.List;
import java.util.Map;

import com.demo.core.dao.base.BaseCoreDao;
import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.dao.base.support.SearchArgumentSupport;
import com.demo.core.dao.base.support.SearchDaoSupport;
import com.demo.core.model.Member;

/**
 * 会员数据访问层接口
 * 
 * 继承接口 {@link SearchDaoSupport},实现分页查询功能
 * 
 * @author ryuu.kk
 */
public interface MemberDao extends BaseCoreDao<Member, Long>, SearchDaoSupport<Member> {

	/**
	 * 更新会员状态信息
	 * @param memberStatus 会员状态信息
	 * @return 成功操作数 
	 */
	int updateStatus(Member member, Map<String, Object> memberStatus);
	/**
	 * 更新会员机构
	 * @param memberInfo 会员信息
	 * @return 成功操作数
	 */
	int updateLast(Member member, Map<String, Object> memberInfo);
	/**
	 * 更新会员机构
	 * @param memberInfo 会员信息
	 * @return 成功操作数
	 */
	int updateCurrent(Member member, Map<String, Object> memberInfo);	

	/**
	 * 通过用户ID联合查询用户在不同站点中的会员列表
	 * @param userId 用户ID
	 * @return List<Member>
	 */
	List<Member> queryList(Long userId);
	
	/**
	 * 通过用户账户联合查询用户在不同站点中的会员列表
	 * @param userName 用户账户
	 * @return List<Member>
	 */
	List<Member> queryList(String userName);
	
	/**
	 * 通过会员ID查询联合查询会员相关信息(用户+角色)
	 * @param memberId 会员ID
	 * @return 会员信息模型
	 */
	Member query(Long memberId);
	
	/**
	 * 分页检索站点下的所有会员(包含用户信息)
	 * 注意:此检索与User一起作为联合查询
	 * @param siteId 站点ID
	 * @param orderBy 排序字段
	 * @param firstResult 数据在第一条位置
	 * @param maxResults 检索的最大条数
	 * @return ResultSearchResult<Member>
	 */
	ResultSearchResult<Member> searchUnion(Long siteId, SearchArgumentSupport args);

}